package thread;

import java.util.Scanner;

public class Demo22 {
    public static void main(String[] args) {
        Object locker=new Object();
        Thread t1=new Thread(()->{
            System.out.println("wait 之前");
            try {
                synchronized (locker){
                    locker.wait();
                    System.out.println("后执行");
                }
            }catch (InterruptedException e){
                throw new RuntimeException();
            }
            System.out.println("wait 之后");
        });
        Thread t2=new Thread(()->{
            Scanner scanner=new Scanner(System.in);
            System.out.println("输入任意内容 通知唤醒t1");
            scanner.next();
            synchronized (locker){
                locker.notify();
                //System.out.println("先执行");
            }
        });
        t1.start();
        t2.start();
        //notify的执行必须在wait之后
        //wait与notify针对同一对象才能生效 这个相同对象就是两线程沟通的桥梁 都需要加synchronized
        //t1 与 t2是随机调度的 但是scanner会进行阻塞等待输入 保证了notify在wait后执行
    }
}
